import { defHttp } from '/@/utils/http/axios'
import { message } from 'ant-design-vue'
import { useGlobSetting } from '/@/hooks/setting'
const globSetting = useGlobSetting()
const baseUploadUrl = globSetting.uploadUrl
const windowInstacnet: any = window
enum Api {
	refreshTokenAPI = 'Login/refresh',
	positionList = '/sys/position/list',
	userList = '/sys/user/list',
	roleList = '/sys/role/list',
	queryDepartTreeSync = '/sys/sysDepart/queryDepartTreeSync',
	queryTreeList = '/sys/sysDepart/queryTreeList',
	loadTreeData = '/sys/category/loadTreeData',
	loadDictItem = '/sys/category/loadDictItem/',
	getDictItems = '/sys/dict/getDictItems/',
	getTableList = '/sys/user/queryUserComponentData',
	getCategoryData = '/sys/category/loadAllData',
}

/**
 * 上传父路径
 */
export const uploadUrl = `${windowInstacnet.config.base_url}/files/upload/image`

/**
 * 职务列表
 * @param params
 */
export const getPositionList = (params) => {
	return defHttp.get({ url: Api.positionList, params })
}
export const refreshToken = (RefreshToken) => {
	return defHttp.post({
		url: Api.refreshTokenAPI,
		headers: {
			RefreshToken,
		},
	})
}

/** 
 * 用户列表
 * @param params
 */
export const getUserList = (params) => {}

/**
 * 角色列表
 * @param params
 */
export const getRoleList = (params) => {
	return defHttp.get({ url: Api.roleList, params })
}

/**
 * 异步获取部门树列表
 */
export const queryDepartTreeSync = (params?) => {
	return defHttp.get({ url: Api.queryDepartTreeSync, params })
}
/**
 * 获取部门树列表
 */
export const queryTreeList = (params?) => {
	return defHttp.get({ url: Api.queryTreeList, params })
}

/**
 * 分类字典树控件 加载节点
 */
export const loadTreeData = (params?) => {
	return defHttp.get({ url: Api.loadTreeData, params })
}

/**
 * 根据字典code加载字典text
 */
export const loadDictItem = (params?) => {
	return defHttp.get({ url: Api.loadDictItem, params })
}

/**
 * 根据字典code加载字典text
 */
export const getDictItems = (dictCode) => {
	return defHttp.get({ url: Api.getDictItems + dictCode }, { joinTime: false })
}
/**
 * 部门用户modal选择列表加载list
 */
export const getTableList = (params) => {
	return defHttp.get({ url: Api.getTableList, params })
}
/**
 * 加载全部分类字典数据
 */
export const loadCategoryData = (params) => {
	return defHttp.get({ url: Api.getCategoryData, params })
}
/**
 * 文件上传
 */
export const uploadFile = (params, success) => {
	return defHttp.uploadFile({ url: uploadUrl }, params, { success })
}
/**
 * 下载文件
 * @param url 文件路径
 * @param fileName 文件名
 * @param parameter
 * @returns {*}
 */
export const downloadFile = (url, fileName?, parameter?) => {
	return getFileblob(url, parameter).then((data) => {
		if (!data || data.size === 0) {
			message.warning('文件下载失败')
			return
		}
		if (typeof window.navigator.msSaveBlob !== 'undefined') {
			window.navigator.msSaveBlob(new Blob([ data ]), fileName)
		} else {
			let url = window.URL.createObjectURL(new Blob([ data ]))
			let link = document.createElement('a')
			link.style.display = 'none'
			link.href = url
			link.setAttribute('download', fileName)
			document.body.appendChild(link)
			link.click()
			document.body.removeChild(link) //下载完成移除元素
			window.URL.revokeObjectURL(url) //释放掉blob对象
		}
	})
}

/**
 * 下载文件 用于excel导出
 * @param url
 * @param parameter
 * @returns {*}
 */
export const getFileblob = (url, parameter) => {
	return defHttp.get(
		{
			url,
			params: parameter,
			responseType: 'blob',
		},
		{ isTransformResponse: false },
	)
}

/**
 * 【用于评论功能】自定义文件上传-方法
 */
export const uploadMyFile = (url, data) => {
	return defHttp.uploadMyFile(url, data)
}
